/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package serversocket;

import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;

/**
 *
 * @author Leo
 */

/*
 * clase que es utilizada para leer y escribir la informacion de los usuarios
 * mediante xml
 */
public class CargaDescargaPersonas {

    ListaPersonas listaPersonas;
    /*
     * metodo que se encarga de cargar la informacion de los usuarios a traves del xml
     */
    public ListaPersonas cargaPersonas() {
        listaPersonas = new ListaPersonas();
        listaPersonas.crearListaPersonas();

        Persona persona;
        Archivo archivo;

        try {
            SAXBuilder builder = new SAXBuilder(false);
            Document doc = builder.build("src/serversocket/ListaPersonas.xml");
            Element raiz = doc.getRootElement();
            List persona1 = raiz.getChildren("persona");
            Iterator k = persona1.iterator();
            while (k.hasNext()) {
                Element e = (Element) k.next();
                Element usuario = e.getChild("usuario");
                Element clave = e.getChild("clave");

                Element repositorio = e.getChild("archivos");
                List archivo1 = repositorio.getChildren("archivo");
                Iterator m = archivo1.iterator();

                persona = new Persona();

                persona.setUsuario(usuario.getText());
                persona.setClave(clave.getText());
                persona.setListaArchivos(new ArrayList<Archivo>());

                while (m.hasNext()) {
                    Element f = (Element) m.next();
                    Element nodo = f.getChild("nombre");

                    archivo = new Archivo();
                    archivo.setNombreArchivo(nodo.getText());

                    persona.getListaArchivos().add(archivo);
                }

                listaPersonas.getMisPersonas().add(persona);
            }
        } catch (Exception e) {
            System.out.println("se cayo cargando el xml");
        }
        return listaPersonas;
    }
    /**
     * metodo que genera un nodo de elemento archivo en el archivo xml
     */
    public class agregarArchivo extends Element {

        public agregarArchivo(Archivo archivo) {
            super("archivo");
            addContent(new Element("nombre").setText(archivo.getNombreArchivo()));
        }
    }
    /**
     * metodo que genera un nodo de elemento archivo en el archivo xml
     */    
    public class agregarPersona extends Element {

        public agregarPersona(Persona persona) {
            super("persona");
            addContent(new Element("usuario").setText(persona.getUsuario()));
            addContent(new Element("clave").setText(persona.getClave()));
            int i = 0;
            Element root = new Element("archivos");

            for (i = 0; i < persona.getListaArchivos().size(); i++) {
                agregarArchivo nuevo = new agregarArchivo(persona.getListaArchivos().get(i));
                root.addContent(nuevo);
            }
            addContent(root);
        }
    }
    /*
     * metodo para escribir la informacion de los usuarios en un xml
     */
    public void escribirPersonas(ListaPersonas personas) {
        int i = 0;
        Element root = new Element("personas");

        for (i = 0; i < personas.getMisPersonas().size(); i++) {
            agregarPersona nuevo = new agregarPersona(personas.getMisPersonas().get(i));
            root.addContent(nuevo);
        }
        Document doc = new Document(root);
        try {
            XMLOutputter out = new XMLOutputter(Format.getPrettyFormat());
            FileWriter writer = new FileWriter("src/serversocket/ListaPersonas.xml");
            out.output(doc, writer);
        } catch (java.io.IOException e) {
            System.out.println("Problema con I/O al escribir el xml");
        } catch (Exception e) {
            System.out.println("Problema al escribir el xml");
        }
    }
}
